import { defineStore } from 'pinia'
import { getAuthCode, postAuthLogin } from '@/api/controller/login-controller/index'
import { usePermissionStore } from '@/store/modules/permission'
export const useUserStore = defineStore({
  // id: 必须的，在所有 Store 中唯一
  id: 'userState',
  // state: 返回对象的函数
  state: () => ({
    // 登录token
    token: null,
    // 刷新token
    refreshToken: null,
    // 登录用户信息
    userInfo: {},
    // 角色
    roles: [],
    needChange: null,
  }),
  getters: {},
  // 可以同步 也可以异步
  actions: {
    //获取验证码的方法
    async getCode() {
      const result = await getAuthCode()
      return result
    },
    // 登录
    async login(userInfo) {
      const result = await postAuthLogin(userInfo)
      this.token = result.data.token
      this.refreshToken = result.data.refreshToken
      this.roles = result.data.userDto.roles
      this.userInfo = result.data.userDto
      this.needChange = result.data.needChange
      return result
    },
    //  缓存用户token
    tokenAction(payload) {
      this.token = payload
    },
    // 获取用户授权角色信息，实际应用中 可以通过token通过请求接口在这里获取用户信息
    getRoles() {
      return new Promise((resolve, reject) => {
        // 获取权限列表 默认就是超级管理员，因为没有进行接口请求 写死
        this.roles = ['admin']
        resolve(this.roles)
      })
    },
    // 获取用户信息 ，如实际应用中 可以通过token通过请求接口在这里获取用户信息
    getInfo(roles) {
      return new Promise((resolve, reject) => {
        this.roles = roles
        resolve(roles)
      })
    },
    // 退出
    logout() {
      return new Promise((resolve, reject) => {
        this.token = null
        this.refreshToken = null
        this.userInfo = {}
        this.roles = []
        const PermissionStore = usePermissionStore()
        PermissionStore.clearRoutes()
        resolve(null)
      })
    },
  },
  // 进行持久化存储
  persist: {
    // 本地存储的名称
    key: 'userState',
    //保存的位置
    storage: window.localStorage, //localstorage
  },
})
